<?php

namespace Database\Seeders;

use App\Models\Tag;
use App\Models\Post;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Config;

class TagSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $this->command->info('开始创建标签...');

        // 收集所有标签，确保唯一性
        $allTags = [];

        // 技术标签（保留最常用的）
        $this->command->info('创建技术标签...');
        $techTags = [
            'PHP', 'Laravel', 'Vue.js', 'React',
            'JavaScript', 'TypeScript', 'Python',
            'MySQL', 'Redis', 'Docker',
            'Git', 'DevOps', '微服务', 'API设计',
            '性能优化', '安全开发', '设计模式'
        ];
        $allTags = array_merge($allTags, $techTags);
        $this->createTags($techTags);

        // 设计标签（保留最常用的）
        $this->command->info('创建设计标签...');
        $designTags = [
            'UI设计', 'UX设计', '交互设计',
            '响应式设计', '设计系统', '设计工具'
        ];
        $this->createTags($this->filterUniqueTagsOnly($designTags, $allTags));
        $allTags = array_merge($allTags, $designTags);

        // 产品标签（保留最常用的）
        $this->command->info('创建产品标签...');
        $productTags = [
            '产品设计', '产品运营', '用户增长',
            '数据分析', '用户体验', '产品迭代'
        ];
        $this->createTags($this->filterUniqueTagsOnly($productTags, $allTags));
        $allTags = array_merge($allTags, $productTags);

        // 团队标签（保留最常用的）
        $this->command->info('创建团队标签...');
        $teamTags = [
            '团队管理', '项目管理', '敏捷开发',
            '团队协作', '远程工作'
        ];
        $this->createTags($this->filterUniqueTagsOnly($teamTags, $allTags));
        $allTags = array_merge($allTags, $teamTags);

        // 开发工具标签（保留最常用的）
        $this->command->info('创建开发工具标签...');
        $toolTags = [
            'IDE', '版本控制', '构建工具',
            '测试工具', '部署工具', '监控工具'
        ];
        $this->createTags($this->filterUniqueTagsOnly($toolTags, $allTags));
        $allTags = array_merge($allTags, $toolTags);

        // 框架和库标签（保留最常用的）
        $this->command->info('创建框架和库标签...');
        $libTags = [
            '前端框架', '后端框架', 'UI组件库',
            '状态管理', '路由管理'
        ];
        $this->createTags($this->filterUniqueTagsOnly($libTags, $allTags));
        $allTags = array_merge($allTags, $libTags);

        // 最佳实践标签（保留最常用的）
        $this->command->info('创建最佳实践标签...');
        $practiceTags = [
            '代码规范', '架构设计', '安全防护',
            '测试策略', '部署方案', '缓存策略'
        ];
        $this->createTags($this->filterUniqueTagsOnly($practiceTags, $allTags));

        $this->command->info('标签创建完成！');

        // 获取所有文章和标签
        $posts = Post::all();
        $tags = Tag::all();

        // 为每篇文章随机分配2-4个标签
        foreach ($posts as $post) {
            $randomTags = $tags->random(rand(2, 4));
            $post->tags()->attach($randomTags);
        }
    }

    /**
     * 过滤出唯一的标签，移除已存在的标签
     */
    private function filterUniqueTagsOnly(array $tags, array $existingTags): array
    {
        return array_diff($tags, $existingTags);
    }

    /**
     * 创建标签
     */
    private function createTags(array $tags): void
    {
        foreach ($tags as $tag) {
            $this->command->line("创建标签: {$tag}");
            
            // 检查标签是否已存在
            $existingTag = Tag::where('name', $tag)->first();
            if ($existingTag) {
                $this->command->info("标签 '{$tag}' 已存在，跳过");
                continue;
            }
            
            Tag::create([
                'name' => $tag,
                'slug' => strtolower(str_replace(' ', '-', $tag)),
                'description' => "关于 {$tag} 的文章和教程",
                'is_visible' => true,
                'meta_title' => $tag,
                'meta_description' => "探索 {$tag} 相关的内容和资源",
            ]);
        }
    }
} 